/*
 * Copyright (C) 2013 The Guava Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package com.google.common.hash;

/**
 * An enum that contains all of the known hash functions.
 *
 * @author Kurt Alfred Kluever
 */
enum HashFunctionEnum {
    ADLER32(Hashing.adler32()), CRC32(Hashing.crc32()), GOOD_FAST_HASH_32(Hashing.goodFastHash(32)), GOOD_FAST_HASH_64(
            Hashing.goodFastHash(64)), GOOD_FAST_HASH_128(Hashing.goodFastHash(128)), GOOD_FAST_HASH_256(
                    Hashing.goodFastHash(256)), MD5(
                            Hashing.md5()), MURMUR3_128(Hashing.murmur3_128()), MURMUR3_32(Hashing.murmur3_32()), SHA1(
                                    Hashing.sha1()), SHA256(Hashing.sha256()), SHA384(Hashing.sha384()), SHA512(
                                            Hashing.sha512()), SIP_HASH24(Hashing.sipHash24()), FARMHASH_FINGERPRINT_64(
                                                    Hashing.farmHashFingerprint64()),

    // Hash functions found in //javatests for comparing against current implementation of CityHash.
    // These can probably be removed sooner or later.
    ;

    private final HashFunction hashFunction;

    private HashFunctionEnum(HashFunction hashFunction) {
        this.hashFunction = hashFunction;
    }

    HashFunction getHashFunction() {
        return hashFunction;
    }
}
